package mx.unam.acatlan.poo.rps.player;

import mx.unam.acatlan.poo.rps.Movement;
import mx.unam.acatlan.poo.rps.RPSRecord;
import mx.unam.acatlan.poo.rps.RPSWorld;
import mx.unam.acatlan.poo.tournament.Player;
import mx.unam.acatlan.poo.tournament.Tournament;

/**
 * Un jugador de PPT.
 * 
 * <p>
 * Los equipos participantes deben heredar de esta clase para poder participar
 * en un {@link RPSRecord} y por lo tanto, en un {@link Tournament}. El metodo
 * {@link Agent#play(Enfrentamiento)} será llamado cada vez que el {@link Agent}
 * participa en un {@link RPSRecord} PPT.
 * </p> 
 * 
 * @author "Carlos Alegria Galicia"
 * @see Tournament
 * @see RandomAgent
 * @see ConstantAgent
 */
public abstract class Agent extends Player {

	/**
	 * 
	 */
	protected final static Movement movements[] = {
										Movement.PIEDRA, Movement.PAPEL,
										Movement.TIJERAS, Movement.NULO};

	/**
	 * @param name
	 */
	public Agent(String name) {
		super(name);
	}
	
	/**
	 * Permite que el jugador participe en un juego PPT.
	 * 
	 * @param rPSWorld El {@link Enfrentamiento} que permite al {@link Agent} participar
	 *              en el juego PPT actual.
	 * @see Enfrentamiento
	 */
	public abstract void play(RPSWorld rPSWorld);
}
